/**
 * Universidade Federal de Campina Grande - UFCG
 * Departamento de Sistemas e Computac�o - DSC
 * 
 * Disciplina: Desenvolvimento de Aplicac�es Corporativas Avancadas
 * 2005.2
 *
 * Alunos: Helton Souza Lima - 20311010
 *         Jo�o Arthur Brunet Monteiro - 20311021
 * 27/02/2006
 */
package util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.StringTokenizer;


/**
 * Essa classe prov� m�todos est�ticos para transformar Strings em datas correspondentes
 * ou fornecer servi�os semelhantes
 * @author Thiago Emmanuel Pereira da Cunha Silva, thiago.manel@gmail.com
 * @author Joao Arthur Brunet Monteiro, joaoarthurbm@gmail.com
 *
 */
public class CalendarUtil {

	/**
	 * Faz a conversao de um string que representa uma data em uma instancia de Calendar
	 * @param data O string que representa a data
	 * @return A data como uma instancia Calendar
	 * @throws ParseException
	 */
	public static Calendar stringToDate(String data) throws ParseException{
		StringTokenizer tokenizer = new StringTokenizer(data,"/");
		int dia = Integer.parseInt(tokenizer.nextToken());
		int mes = Integer.parseInt(tokenizer.nextToken());
		int ano = Integer.parseInt(tokenizer.nextToken());
		
		Date date = new Date();
		SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		
		date = format.parse(data);
				
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		
		if(calendar.get(Calendar.MONTH) != mes-1) throw new ParseException("Data invalida.", mes);
		if(calendar.get(Calendar.DAY_OF_MONTH) != dia) throw new ParseException("Data invalida.", dia);
		if(calendar.get(Calendar.YEAR) != ano) throw new ParseException("Data invalida.", ano);
		
		return calendar;
	}
	
	/**
	 * Retorna se a data a se verificada est� no periodo compreendido entre inicio e fim
	 * @param data Data a ser verificada
	 * @param inicio Data do inicio do periodo
	 * @param fim Data final do periodo
	 * @return true caso a data a se verificada esteja no periodo compreendido entre inicio e fim
	 */
	public static boolean estaEntreDatas(Date data, Calendar inicio, Calendar fim) {
		return (data.after(inicio.getTime()) && data.before(fim.getTime())) || data.equals(inicio) || data.equals(fim);
	}
}
